Skip to content

Add genesis migration dual-write queue for new Core chain - #748

Merged
rickyrombo merged 3 commits into
mainfrom
mjp-new-chain-queue
Aug 3, 2026
Merged

Add genesis migration dual-write queue for new Core chain#748
rickyrombo merged 3 commits into
mainfrom
mjp-new-chain-queue

Conversation

@rickyrombo

Copy link
Copy Markdown
Contributor

Summary

  • After a relay transaction is confirmed, enqueue it (fire-and-forget) into new_chain_queue
  • NewChainFlusher goroutine drains the queue and forwards transactions to the new Core chain via ForwardTransaction ConnectRPC

Ordering

Transactions are flushed sequentially in insertion order. Parallel flushing was considered and rejected: dev apps can act on behalf of other users, creating cross-user ordering dependencies that no simple partitioning scheme can safely handle.

On error the flusher halts at the failing row (2s backoff + retry) rather than skipping — skipping would violate ordering. Mempool-full responses are retried separately with exponential backoff (500ms → 15s cap).

Config knobs (all off by default)

Env var Purpose
newChainUrl ConnectRPC endpoint of the bootstrap node
newChainQueueEnabled Turns on enqueueing in the relay path
newChainFlushEnabled Starts the background flusher goroutine
newChainFlushFromBlock Trims rows already covered by the genesis backfill
newChainInsecureSkipVerify Disables TLS verification (for localstack / self-signed certs)

Test plan

  • Unit tests cover: enqueue correctness, backfill trim, trim+flush, full drain
  • Deploy with all knobs off — no behaviour change
  • Enable newChainQueueEnabled first to populate the queue before enabling the flusher

🤖 Generated with Claude Code

rickyrombo and others added 2 commits March 31, 2026 17:34
After a relay transaction is confirmed on the legacy chain, enqueue it
(fire-and-forget) into new_chain_queue. A background NewChainFlusher
goroutine drains the queue and forwards transactions to the new Core
chain via ConnectRPC/ForwardTransaction.

Transactions are flushed sequentially in insertion order. Parallel
flushing was considered and rejected: dev apps can act on behalf of
other users, creating cross-user ordering dependencies that no simple
partitioning scheme can safely handle.

On error the flusher halts at the failing row (with a 2s backoff) and
retries rather than skipping — skipping would violate ordering. Mempool
full responses are retried separately with exponential backoff.

Config knobs (all off by default):
- newChainUrl: ConnectRPC endpoint of the bootstrap node
- newChainQueueEnabled: turns on enqueueing in the relay path
- newChainFlushEnabled: starts the background flusher goroutine
- newChainFlushFromBlock: trims rows already covered by the backfill
- newChainInsecureSkipVerify: disables TLS verification (e.g. localstack)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@gitguardian

gitguardian Bot commented Aug 3, 2026

Copy link
Copy Markdown

⚠️ GitGuardian has uncovered 2 secrets following the scan of your pull request.

Please consider investigating the findings and remediating the incidents. Failure to do so may lead to compromising the associated services or software components.

🔎 Detected hardcoded secrets in your pull request
GitGuardian id GitGuardian status Secret Commit Filename
33812938 Triggered Generic High Entropy Secret a93cc8d api/rate_limit_middleware_test.go View secret
33812938 Triggered Generic High Entropy Secret a93cc8d api/rate_limit_middleware_test.go View secret
🛠 Guidelines to remediate hardcoded secrets
  1. Understand the implications of revoking this secret by investigating where it is used in your code.
  2. Replace and store your secrets safely. Learn here the best practices.
  3. Revoke and rotate these secrets.
  4. If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.

To avoid such incidents in the future consider


🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.

The branch was cut when migrations were in the 0190s; main is now at 0231,
so 0180 sorted misleadingly early. Content is unchanged — pg_migrate.sh
tracks applied migrations by file md5, so the rename is a no-op for any DB
that already ran it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@rickyrombo
rickyrombo merged commit d54d85c into main Aug 3, 2026
2 checks passed
@rickyrombo
rickyrombo deleted the mjp-new-chain-queue branch August 3, 2026 15:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant